#pragma once
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cufft.h"

int process_fft_bframe(int line_num, int start_z, int downdepth, float *gpu_window, int pixel_num, unsigned short *data_gpu_in, float *gpu_out, double *gpu_prefft_out, float *gpu_postout_r, float *gpu_postout_i, double2 *gpu_fft_out, cufftHandle fft_plan, cudaStream_t stream);
int process_fft_bframe_enface(int line_num, int start_z, int downdepth, float *gpu_window, int pixel_num, unsigned short *data_gpu_in, float *gpu_out_log, double *gpu_prefft_out, float *gpu_postout_r, float *gpu_postout_i, float *enfaceout, double2 *gpu_fft_out, cufftHandle fft_plan, int low, int high, cudaStream_t stream);
int process_fft(int line_num, int start_z, int downdepth, float *gpu_window, int pixel_num, unsigned short *data_gpu_in, float *gpu_prefft_out, float2 *gpu_postout, cuComplex *gpu_fft_out, cufftHandle fft_plan, cudaStream_t stream);
int process_fft_sync(int line_num, int start_z, int downdepth, float *gpu_window, int pixel_num, unsigned short *data_gpu_in, float2 *cpu_out, float *gpu_prefft_out, float2 *gpu_postout, cuComplex *gpu_fft_out, cufftHandle fft_plan);
void compute_hanning_window_gpu(float* window_gpu, int size);
int init_process();

int finish_process();